<?php

namespace Kollway\CodeGenerator\Generators;

use Kollway\CodeGenerator\Services\YamlService;

trait GeneratorTrait
{
    protected function getTableAndOption(&$table, &$option)
    {
        // 不能同时指定
        $table = $this->option('table');
        $file = $this->option('file');
        if (!empty($table) && !empty($file)) {
            $this->info('不能同时指定 table 和 file 参数');
            exit;
        }

        if ($file) {
            // 通过配置文件指定配置
            $yaml_config = base_path('code-gen/' . $file);

            if (!is_file($yaml_config)) {
                $this->info('文件不存在: ' . $yaml_config);
                exit;
            }

            $configs = yaml_parse_file($yaml_config);
            if (!$configs) {
                $this->info('yml文件解析失败: ' . $yaml_config);
                exit;
            }
            // 检查 yaml 配置(不完善)
            if (is_string($error = (new YamlService())->checkSyntax($configs))) {
                $this->info($error);
                exit;
            }
            if (count($configs) != 1) {
                $this->info('该命令只支持单个表配置');
                exit;
            }

            // 只有一个数组配置
            foreach ($configs as $key => $value) {
                $table = $key;
                $option = $value;
            }
        } else {
            // 只使用表名
            if (!empty($table)) {
                $table_exist = \DB::select('show tables like \'' . \DB::getTablePrefix() . $table . '\'');
                if (!$table_exist) {
                    $this->info("表: $table 不存在");
                    exit;
                }
            }
            if (empty($table)) {
                $this->info("参数缺失");
                exit;
            }
        }
    }
}